
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;

/**
 *
 * Beschreibung
 *
 * @version 1.0 vom 06.05.2015
 * @author 
 */

public class Fenster extends JFrame implements View {
    // Anfang Attribute

    private ZeichenPanel zeichenflaeche = new ZeichenPanel(null, true);
    public Controller controller;
    private JButton startButton = new JButton();
    private JButton wurfButton = new JButton();
    private JButton hilfButton = new JButton();
    private JButton speicherButton = new JButton();
    private JLabel wuerfelFeld = new JLabel();
    private JLabel kommentarFeld = new JLabel();

    // Ende Attribute

    public Fenster(String title) { 
        // Frame-Initialisierung
        super(title);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        int frameWidth = 1005; 
        int frameHeight = 858;
        setSize(frameWidth, frameHeight);
        Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
        int x = (d.width - getSize().width) / 2;
        int y = (d.height - getSize().height) / 2;
        setLocation(x, y);
        setResizable(false);
        Container cp = getContentPane();
        cp.setLayout(null);
        // Anfang Komponenten

        zeichenflaeche.setBounds(88, 80, 650, 650);
        zeichenflaeche.setOpaque(false);
        cp.add(zeichenflaeche);

        startButton.setBounds(125, 48, 115, 25);
        startButton.setText("Spiel starten");
        startButton.setMargin(new Insets(2, 2, 2, 2));
        startButton.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    startButton_ActionPerformed(evt);
                }
            });
        cp.add(startButton);

        wurfButton.setBounds(245, 48, 75, 25);
        wurfButton.setText("Würfeln");
        wurfButton.setMargin(new Insets(2, 2, 2, 2));
        wurfButton.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    wurfButton_ActionPerformed(evt);
                }
            });
        cp.add(wurfButton);

        hilfButton.setBounds(502, 48, 75, 25);
        hilfButton.setText("Hilfe");
        hilfButton.setMargin(new Insets(2, 2, 2, 2));
        hilfButton.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    hilfButton_ActionPerformed(evt);
                }
            });
        cp.add(hilfButton);

        speicherButton.setBounds(582, 48, 115, 25);
        speicherButton.setText("Spiel Speichern");
        speicherButton.setMargin(new Insets(2, 2, 2, 2));
        speicherButton.addActionListener(new ActionListener() { 
                public void actionPerformed(ActionEvent evt) { 
                    speicherButton_ActionPerformed(evt);
                }
            });
        cp.add(speicherButton);

        wuerfelFeld.setBounds(324, 51, 206, 20);
        cp.add(wuerfelFeld);

        kommentarFeld.setBounds(125, 85, 572, 20);
        cp.add(kommentarFeld);
        // Ende Komponenten

        setVisible(true);

        zeichenflaeche.fensterSetzen(this);
    } // end of public Fenster

    // Anfang Methoden

    public static void main(String[] args) {
        new Fenster("Fenster");
    } // end of main

    public void startButton_ActionPerformed(ActionEvent evt) {
        System.out.println("startButton gedrückt"); // TODO hier Quelltext einfügen
    } // end of startButton_ActionPerformed

    public void wurfButton_ActionPerformed(ActionEvent evt) {
        controller.wuerfeln();

        System.out.println("wurfButton gedrückt");// TODO hier Quelltext einfügen
    } // end of wurfButton_ActionPerformed

    public void hilfButton_ActionPerformed(ActionEvent evt) {
        System.out.println("hilfButton gedrückt");// TODO hier Quelltext einfügen
    } // end of hilfButton_ActionPerformed

    public void speicherButton_ActionPerformed(ActionEvent evt) {
        System.out.println("speicherButton gedrückt"); // TODO hier Quelltext einfügen
    } // end of speicherButton_ActionPerformed

    public void labelBezeichnungSetzen (String text)
    {
        wuerfelFeld.setText (text);
    }

    //Die folgenden zwei Methoden muessen in Ihrer JFrame-Unterklasse ergaenzt werden!
    public void vorbereiten() {
        //Tastaturabfrage hinzufuegen
        KeyboardConnection key = new KeyboardConnection(this);
        zeichenflaeche.requestFocus(); //noetig, weil zumindest 1 Element den Focus braucht, damit KeyListener anschlaegt (und das nicht im Konstruktor)
        //Bilder vorbereiten, incl tile-Breite und tile-Hoehe
        zeichenflaeche.bilderInitialisieren(50, 50);
        repaint();    
        spielfeldSetzen();
        // Bilder an Starthäuser setzen (kleine Kreise mit Kreuz)
    }    

    void setzeBildAnPosition(int x, int y, String bildname) {
        zeichenflaeche.setzeBildAnPosition(x,y,bildname);
        repaint();
    }

    void spielfeldSetzen(){
        setzeBildAnPosition(1,1, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(1,2, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(2,1, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(2,2, "Material/kleinerKreis_rot.png");

        setzeBildAnPosition(1,5, "Material/großerKreis_rot.png");

        setzeBildAnPosition(10,1, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(11,1, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(10,2, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(11,2, "Material/kleinerKreis_gruen.png");

        setzeBildAnPosition(7,1, "Material/großerKreis_gruen.png");

        setzeBildAnPosition(10,10, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(11,11, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(10,11, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(11,10, "Material/kleinerKreis_schwarz.png");

        setzeBildAnPosition(11,7, "Material/großerKreis_schwarz.png");

        setzeBildAnPosition(1,10, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(1,11, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(2,10, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(2,11, "Material/kleinerKreis_gelb.png");

        setzeBildAnPosition(5,11, "Material/großerKreis_gelb.png");

        setzeBildAnPosition(5,1, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(6,1, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,2, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,4, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,3, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,2, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,3, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,4, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(2,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(3,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(4,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(8,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(9,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(10,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(11,5, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(1,6, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(11,6, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(1,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(2,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(3,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(4,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(8,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(9,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(10,7, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,8, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,8, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,9, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,9, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(5,10, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,10, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(6,11, "Material/großerKreis_weiß.png");
        setzeBildAnPosition(7,11, "Material/großerKreis_weiß.png");

        setzeBildAnPosition(2,6, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(3,6, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(4,6, "Material/kleinerKreis_rot.png");
        setzeBildAnPosition(5,6, "Material/kleinerKreis_rot.png");

        setzeBildAnPosition(6,2, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(6,3, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(6,4, "Material/kleinerKreis_gruen.png");
        setzeBildAnPosition(6,5, "Material/kleinerKreis_gruen.png");

        setzeBildAnPosition(7,6, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(8,6, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(9,6, "Material/kleinerKreis_schwarz.png");
        setzeBildAnPosition(10,6, "Material/kleinerKreis_schwarz.png");

        setzeBildAnPosition(6,7, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(6,8, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(6,9, "Material/kleinerKreis_gelb.png");
        setzeBildAnPosition(6,10, "Material/kleinerKreis_gelb.png");

        //spielfigur_rot.png
        //spielfigur_gruen.png
        //spielfigur_schwarz.png
        //spielfigur_gelb.png

    }

    public void controllerSetzen(Controller neuerController){
        controller= neuerController;
    }

   

    int xyInFeldnrUmrechnen(int x, int y) {
        int feldnr;

        if (x==1 && y==5) {feldnr =0;}
        else if (x==2 && y==5) {feldnr=1;}
        else if (x==3 && y==5) {feldnr=2;}
        else if (x==4 && y==5) {feldnr=3;}
        else if (x==5 && y==5) {feldnr=4;}
        else if (x==5 && y==4) {feldnr=5;}
        else if (x==5 && y==3) {feldnr=6;}
        else if (x==5 && y==2) {feldnr=7;}
        else if (x==5 && y==1) {feldnr=8;}
        else if (x==6 && y==1) {feldnr=9;}
        else if (x==7 && y==1) {feldnr=10;}
        else if (x==7 && y==2) {feldnr=11;}
        else if (x==7 && y==3) {feldnr=12;}
        else if (x==7 && y==4) {feldnr=13;}
        else if (x==7 && y==5) {feldnr=14;}
        else if (x==8 && y==5) {feldnr=15;}
        else if (x==9 && y==5) {feldnr=16;}
        else if (x==10 && y==5) {feldnr=17;}
        else if (x==11 && y==5) {feldnr=18;}
        else if (x==11 && y==6) {feldnr=19;}
        else if (x==11 && y==7) {feldnr=20;}
        else if (x==10 && y==7) {feldnr=21;}
        else if (x==9 && y==7) {feldnr=22;}
        else if (x==8 && y==7) {feldnr=23;}
        else if (x==7 && y==7) {feldnr=24;}
        else if (x==7 && y==8) {feldnr=25;}
        else if (x==7 && y==9) {feldnr=26;}
        else if (x==7 && y==10) {feldnr=27;}
        else if (x==7 && y==11) {feldnr=28;}
        else if (x==6 && y==11) {feldnr=29;}
        else if (x==5 && y==11) {feldnr=30;}
        else if (x==5 && y==10) {feldnr=31;}
        else if (x==5 && y==9) {feldnr=32;}
        else if (x==5 && y==8) {feldnr=33;}
        else if (x==5 && y==7) {feldnr=34;}
        else if (x==4 && y==7) {feldnr=35;}
        else if (x==3 && y==7) {feldnr=36;}
        else if (x==2 && y==7) {feldnr=37;}
        else if (x==1 && y==7) {feldnr=38;}
        else if (x==1 && y==6) {feldnr=39;}

        else if (x==1 && y==1) {feldnr=-10;}
        else if (x==2 && y==1) {feldnr=-20;}
        else if (x==2 && y==2) {feldnr=-30;}
        else if (x==1 && y==2) {feldnr=-40;}
        else if (x==10 && y==1) {feldnr=-50;}
        else if (x==11 && y==1) {feldnr=-60;}
        else if (x==11 && y==2) {feldnr=-70;}
        else if (x==10 && y==2) {feldnr=-80;}
        else if (x==10 && y==10) {feldnr=-90;}
        else if (x==11 && y==10) {feldnr=-100;}
        else if (x==11 && y==11) {feldnr=-110;}
        else if (x==10 && y==11) {feldnr=-120;}
        else if (x==1 && y==10) {feldnr=-130;}
        else if (x==2 && y==10) {feldnr=-140;}
        else if (x==2 && y==11) {feldnr=-150;}
        else if (x==1 && y==11) {feldnr=-160;}

        else if (x==2 && y==6) {feldnr=-210;}
        else if (x==3 && y==6) {feldnr=-220;}
        else if (x==4 && y==6) {feldnr=-230;}
        else if (x==5 && y==6) {feldnr=-240;}
        else if (x==6 && y==2) {feldnr=-250;}
        else if (x==6 && y==3) {feldnr=-260;}
        else if (x==6 && y==4) {feldnr=-270;}
        else if (x==6 && y==5) {feldnr=-280;}
        else if (x==10 && y==6) {feldnr=-290;}
        else if (x==9 && y==6) {feldnr=-300;}
        else if (x==8 && y==6) {feldnr=-310;}
        else if (x==7 && y==6) {feldnr=-320;}
        else if (x==6 && y==10) {feldnr=-330;}
        else if (x==6 && y==9) {feldnr=-340;}
        else if (x==6 && y==8) {feldnr=-350;}
        else if (x==6 && y==7) {feldnr=-360;}
        else feldnr=9999;

        return feldnr;
    }

    public void figurAnzeigen(int feldnr, int spieler){
        int x=0;
        int y=0;

        if (feldnr==0) {x=1; y=5;}
        else if (feldnr==1) {x=2; y=5;}
        else if (feldnr==2) {x=3; y=5;}
        else if (feldnr==3) {x=4; y=5;}
        else if (feldnr==4) {x=5; y=5;}
        else if (feldnr==5) {x=5; y=4;}
        else if (feldnr==6) {x=5; y=3;}
        else if (feldnr==7) {x=5; y=2;}
        else if (feldnr==8) {x=5; y=1;}
        else if (feldnr==9) {x=6; y=1;}
        else if (feldnr==10) {x=7; y=1;}
        else if (feldnr==11) {x=7; y=2;}
        else if (feldnr==12) {x=7; y=3;}
        else if (feldnr==13) {x=7; y=4;}
        else if (feldnr==14) {x=7; y=5;}
        else if (feldnr==15) {x=8; y=5;}
        else if (feldnr==16) {x=9; y=5;}
        else if (feldnr==17) {x=10; y=5;}
        else if (feldnr==18) {x=11; y=5;}
        else if (feldnr==19) {x=11; y=6;}
        else if (feldnr==20) {x=11; y=7;}
        else if (feldnr==21) {x=10; y=7;}
        else if (feldnr==22) {x=9; y=7;}
        else if (feldnr==23) {x=8; y=7;}
        else if (feldnr==24) {x=7; y=7;}
        else if (feldnr==25) {x=7; y=8;}
        else if (feldnr==26) {x=7; y=9;}
        else if (feldnr==27) {x=7; y=10;}
        else if (feldnr==28) {x=7; y=11;}
        else if (feldnr==29) {x=6; y=11;}
        else if (feldnr==30) {x=5; y=11;}
        else if (feldnr==31) {x=5; y=10;}
        else if (feldnr==32) {x=5; y=9;}
        else if (feldnr==33) {x=5; y=8;}
        else if (feldnr==34) {x=5; y=7;}
        else if (feldnr==35) {x=4; y=7;}
        else if (feldnr==36) {x=3; y=7;}
        else if (feldnr==37) {x=2; y=7;}
        else if (feldnr==38) {x=1; y=7;}
        else if (feldnr==39) {x=1; y=6;}

        else if (feldnr==-10) {x=1; y=1;}
        else if (feldnr==-20) {x=2; y=1;}
        else if (feldnr==-30) {x=2; y=2;}
        else if (feldnr==-40) {x=1; y=2;}
        else if (feldnr==-50) {x=10; y=1;}
        else if (feldnr==-60) {x=11; y=1;}
        else if (feldnr==-70) {x=11; y=2;}
        else if (feldnr==-80) {x=10; y=2;}
        else if (feldnr==-90) {x=10; y=10;}
        else if (feldnr==-100) {x=11; y=10;}
        else if (feldnr==-110) {x=11; y=11;}
        else if (feldnr==-120) {x=10; y=11;}
        else if (feldnr==-130) {x=1; y=10;}
        else if (feldnr==-140) {x=2; y=10;}
        else if (feldnr==-150) {x=2; y=11;}
        else if (feldnr==-160) {x=1; y=11;}

        else if (feldnr==-210) {x=2; y=6;}
        else if (feldnr==-220) {x=3; y=6;}
        else if (feldnr==-230) {x=4; y=6;}
        else if (feldnr==-240) {x=5; y=6;}
        else if (feldnr==-250) {x=6; y=2;}
        else if (feldnr==-260) {x=6; y=3;}
        else if (feldnr==-270) {x=6; y=4;}
        else if (feldnr==-280) {x=6; y=5;}
        else if (feldnr==-290) {x=10; y=6;}
        else if (feldnr==-300) {x=9; y=6;}
        else if (feldnr==-310) {x=8; y=6;}
        else if (feldnr==-320) {x=7; y=6;}
        else if (feldnr==-330) {x=6; y=10;}
        else if (feldnr==-340) {x=6; y=9;}
        else if (feldnr==-350) {x=6; y=8;}
        else if (feldnr==-360) {x=6; y=7;}

        if (spieler == 1){
            if (feldnr >= 0)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/spielfigur_rot.png");}
            if (feldnr < 0 && feldnr >= -40)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_rot.png");}
            if (feldnr < -200 && feldnr >= -240)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_rot.png");}
        } else if (spieler == 2){
            if (feldnr >= 0)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/spielfigur_gruen.png");}
            if (feldnr < -40 && feldnr >= -80)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_gruen.png");}
            if (feldnr < -240 && feldnr >= -280)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_gruen.png");}
        } else if (spieler == 3){
            if (feldnr >= 0)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/spielfigur_schwarz.png");}
            if (feldnr < -80 && feldnr >= -120)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_schwarz.png");}
            if (feldnr < -280 && feldnr >= -320)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_schwarz.png");}
        } else if (spieler == 4){
            if (feldnr >= 0)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/spielfigur_gelb.png");}
            if (feldnr < -120 && feldnr >= -160)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_gelb.png");}
            if (feldnr < -320 && feldnr >= -360)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/zielfigur_gelb.png");}
        } else if (spieler == -1){
            if (feldnr == 0)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_rot.png");}
            if (feldnr >= 1 && feldnr <= 9)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_weiß.png");}
            if (feldnr == 10)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_gruen.png");}
            if (feldnr >= 11 && feldnr <= 19)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_weiß.png");}
            if (feldnr == 20)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_schwarz.png");}
            if (feldnr >= 21 && feldnr <= 29)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_weiß.png");}
            if (feldnr == 30)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_gelb.png");}
            if (feldnr >= 31 && feldnr <= 39)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/großerKreis_weiß.png");}
            if (feldnr < 0 && feldnr >= -40)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/kleinerKreis_rot.png");}
            if (feldnr < -40 && feldnr >= -80)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/kleinerKreis_gruen.png");}
            if (feldnr < -80 && feldnr >= -120)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/kleinerKreis_schwarz.png");}
            if (feldnr < -120 && feldnr >= -160)
            {zeichenflaeche.setzeFigurAnPosition(x, y, "Material/kleinerKreis_gelb.png");}
        }
    }

    //     public void ausHausRausAnzeigen(){

    //         if(model_Charlie.ausHausRaus()
    //     }

    public void wurfAnzeigen(String text){
        wuerfelFeld.setText(text); 
    }

    public void kommentarAnzeigen(String text){
        kommentarFeld.setText(text); 
    }

    //	 Ende Methoden
} // end of class Fenster

